﻿Shader "Custom/VertexLitDiffuse" {
	Properties {
		_MainTex("Base (RGB)", 2D) = "white" {}
	}
	SubShader {
		Tags { "RenderType" = "Opaque" }
		LOD 200

		Pass{
			Tags { "LightMode" = "Vertex" }

			Cull Back
			Lighting On

			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			#include "UnityCG.cginc"

			sampler2D _MainTex;
			float4 _MainTex_ST;

			struct a2v
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;
				float4 texcoord : TEXCOORD0;
			};

			struct v2f
			{
				float4 pos : POSITION;
				float2 uv : TEXCOORD0;
				float3 color : TEXCOORD1;
			};

			v2f vert(a2v v)
			{
				v2f o;
				o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
				o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); //（UnityCG.cginc中的一个内建的宏）根据每个顶点的v.texcoord值和指定的纹理资源_MainTex，来获得对应的uv坐标，该模型网格上的点对应到纹理上的坐标值
				o.color = ShadeVertexLights(v.vertex, v.normal); //（内建函数）通过给定的顶点和法向来计算每个像素受到光照的效果，该函数选择了最近的四个光源以及漫射光来进行计算该像素的颜色。
				return o;
			}
			float4 frag(v2f i) :COLOR
			{
				float4 c = tex2D(_MainTex, i.uv);  //根据uv坐标和对应纹理_MainTex通过2D纹理采样（一张贴图中对一个点进行采样）计算出该像素的颜色值
				c.rgb = c.rgb * i.color * 2;       //计算出的颜色值（纹理颜色）与之前vertex函数计算出的颜色值（光照颜色）相乘，并将结果再乘上2
				return c;
			}
			ENDCG
		}
	} 
	FallBack "Diffuse"
}
